package com.lbs.jiepiaisi.utils;

import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.util.Log;


public class SpUtil {
    static SharedPreferences prefs;

    public static void init(Context context) {
        prefs = PreferenceManager.getDefaultSharedPreferences(context);
    }

    /**
     * 获取保存着的boolean对象。
     *
     * @param key 键名
     * @param defValue 当不存在时返回的默认值。
     * @return 返回获取到的值，当不存在时返回默认值。
     */
    public static boolean getBoolean(String key, boolean defValue) {
        return prefs.getBoolean(key, defValue);
    }
    public static boolean getBoolean(String key) {
        return getBoolean(key, false);
    }

    /**
     * 获取保存着的int对象。
     *
     * @param key 键名
     * @param defValue 当不存在时返回的默认值。
     * @return 返回获取到的值，当不存在时返回默认值。
     */
    public static int getInt(String key, int defValue) {
        return prefs.getInt(key, defValue);
    }
    public static int getInt(String key) {
        return getInt(key, -1);
    }

    /**
     * 获取保存着的long对象。
     *
     * @param key 键名
     * @param defValue 当不存在时返回的默认值。
     * @return 返回获取到的值，当不存在时返回默认值。
     */
    public static long getLong(String key, long defValue) {
        return prefs.getLong(key, defValue);
    }
    public static long getLong(String key) {
        return getLong(key, -1L);
    }

    /**
     * 获取保存的float对象。
     *
     * @param key 键名
     * @param defValue 当不存在时返回的默认值。
     * @return 返回获取到的值，当不存在时返回默认值。
     */
    public static float getFloat(String key, float defValue) {
        return prefs.getFloat(key, defValue);
    }
    public static float getFloat(String key) {
        return getFloat(key, -1.f);
    }

    /**
     * 获取保存的String对象
     *
     * @param key 键名
     * @param defValue 当不存在时返回的默认值
     * @return 返回获取到的值，当不存在时返回默认值
     */
    public static String getString(String key, String defValue) {
        return prefs.getString(key, defValue);
    }
    public static String getString(String key) {
        return getString(key, "");
    }
    /**
     * 设置键值对
     * 注意：当保存的value不是boolean, byte(会被转换成int保存),int, long, float,
     * String等类型时将调用它的toString()方法进行值的保存。
     *
     * @param key 键
     * @param value 值
     * @return 引用的KV对象
     */
    public static void put(String key, Object value) {
        Log.e("put","type = "+value.getClass());
        if (value instanceof Boolean) {
            prefs.edit().putBoolean(key, (Boolean)value).apply();
        } else if (value instanceof Integer || value instanceof Byte) {
            prefs.edit().putInt(key, (Integer)value).apply();
        } else if (value instanceof Long) {
            prefs.edit().putLong(key, (Long)value).apply();
        } else if (value instanceof Float) {
            prefs.edit().putFloat(key, (Float)value).apply();
        } else if (value instanceof String) {
            prefs.edit().putString(key, (String)value).apply();
        } else {
            Log.e("put","type = Others");
        }
    }

    public static Object get(String key, Object value) {
        Log.e("get","type = "+value.getClass());
        if (value instanceof Boolean) {
            return prefs.getBoolean(key, (Boolean)value);
        } else if (value instanceof Integer || value instanceof Byte) {
            return prefs.getInt(key, (Integer)value);
        } else if (value instanceof Long) {
            return prefs.getLong(key, (Long)value);
        } else if (value instanceof Float) {
            return prefs.getFloat(key, (Float)value);
        } else if (value instanceof String) {
            return prefs.getString(key, (String)value);
        }
        return null;
    }

    /**
     * 移除键值对。
     *
     * @param key 要移除的键名称。
     * @return 引用的KV对象。
     */
    public static void remove(String key) {
        prefs.edit().remove(key).apply();
    }

    /**
     * 清除所有键值对。
     *
     * @return 引用的KV对象。
     */
    public static void clear() {
        prefs.edit().clear().apply();
    }

    /**
     * 是否包含某个键。
     *
     * @param key
     *            查询的键名称。
     * @return 当且仅当包含该键时返回true, 否则返回false.
     */
    public static boolean contains(String key) {
        return prefs.contains(key);
    }

    /**
     * 返回是否提交成功。
     *
     * @return 当且仅当提交成功时返回true, 否则返回false.
     */
//    public boolean commit() {
//        return prefs.edit().commit();
//    }





    ////////////////////////////////////////////////////
    public static boolean isLogin() {
        return prefs.getBoolean("isLogin", false);
    }

    public static void putLogin(boolean isLogin) {
        prefs.edit().putBoolean("isLogin", isLogin).apply();
    }

    /**
     * 判断是否首次启动
     */
    public static void setFirstStart() {
        prefs.edit().putBoolean("first_start", false).apply();
    }

    public static boolean getFirstStart() {
        return prefs.getBoolean("first_start", true);
    }


    /**
     * 定位地址
     */
    public static void putAddress(String address) {
        prefs.edit().putString("address", address).apply();
    }
    public static String getAddress() {
        return prefs.getString("address", "");
    }

}
